import { Behaviour, SerilizeField, propertyEditor_None } from "./gameengine";
import { WalkableBehaviour } from ".";


//寻路命令
export class NpcBehaviour extends Behaviour {
    @SerilizeField(propertyEditor_None)
    private patrol: { x: number, y: number }[] = [];
    onStart() {
        const walkable = this.displayObject.getScript(WalkableBehaviour);
        walkable.goto(this.patrol.map(node => {
            return {
                x: node.x * 64,
                y: node.y * 64
            }
        }));
        walkable.onFinished = () => {
            this.patrol = this.patrol.reverse();
            console.log(this.patrol);
            walkable.goto(this.patrol.map(node => {
                return {
                    x: node.x * 64,
                    y: node.y * 64
                }
            }));
        }
        // const npcBehaviour = getGameObjectById("npcLayer").getScript(NPCLayerBehaviour);
        // npcBehaviour.addNPC(this);
    }
    onUpdate() {

    }
}

export class NPCLayerBehaviour extends Behaviour {
    
    //private npcsGameObject: GameObject[] = [];
    private npcs: NpcBehaviour[] = [];
    

    addNPC(npc: NpcBehaviour) {
        this.npcs.push(npc);
    }

    onStart() {
        // for (let npc of this.npcsGameObject) {
        //     this.displayObject.addChild(npc);
        // }
    } 
    
    getNPCByTileXY(tileX: number, tileY: number) {

    }

    onUpdate() {
               
    }

    // parseData(data: any) {
    //     for (let npcData of data.npcData) {
    //         const npcGameObject = core.createPrefab(npcPrefab);
    //         const transform = npcGameObject.getScript(Transform);
    //         const cId = npcData.cId;

    //         transform.x = npcData.x * 64;
    //         transform.y = npcData.y * 64;
    //         this.npcsGameObject.push(npcGameObject);
    //         let gameItem: NPC;
    //         if (cId == 1) {
    //             gameItem = new StaticNPC(cId);

    //         }
    //         if (gameItem) {
    //             gameItem.x = npcData.x;
    //             gameItem.y = npcData.y;
    //             gameItem.cId = npcData.cId;
    //             gameItem.uId = npcData.uId;
    //             const imageRenderer = npcGameObject.getScript(ImageRenderer);
    //             imageRenderer.imageName = gameItem.config.iconName;
    //             this.npcs.push(gameItem);
    //             gameItem.npcGameObject = npcGameObject;
    //         }
    //     }

    //     console.log(data);
    // }
}

// export abstract class NPC {

//     uId: number;
//     cId: number;
//     x: number;
//     y: number;
//     npcGameObject: GameObject;
//     config: NPCConfigType;

//     constructor(cId: number) {
//         this.config = npcConfig.find(config => config.id === cId);
//     }

//     /**
//      * 与npc对话，如果对话完需要npc消失，返回true,否则返回 false
//      */
//     talk(): boolean {
//         return false;
//     }
// }

// //静态npc
// export class StaticNPC extends NPC {

//     talk() {
//         console.log("你好。");
//         return true;
//     }
// }

// //动态寻路npc
// export class PatrolNPC extends NPC {

// }

// //与npc对话
// export class TalkNPCCommand extends CommandBase {

//     private npc: NPC;
//     private ui: GameObject;

//     constructor(npc: NPC) {
//         super();
//         this.npc = npc;
//     }

//     execute(): void {
//         const ui = core.createPrefab(uiPrefabData);
//         const uiRoot = getGameObjectById("UIRoot");
//         uiRoot.getScript(HitTestScript).onClick = () => {
//             uiRoot.removeChild(ui);
//             this.onFinished();
//         }
//         uiRoot.addChild(ui);
//         this.ui = ui;
//     }    

//     cancel(): void {
//         const uiRoot = getGameObjectById("UIRoot");
//         uiRoot.removeChild(this.ui);
//     }

    
// }